์์ฑ: 2026-04-23 00:58:32์์ : 2026-04-23 00:58:32
PostgreSQL 16์์ 17๋ก ์ ๊ทธ๋ ์ด๋ ๊ฐ์ด๋: ์ฃผ์ ๋ณ๊ฒฝ์ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
PostgreSQL 17์ ์ฑ๋ฅ ์ต์ ํ, ๊ด๋ฆฌ ํธ์์ฑ ํฅ์, ๊ทธ๋ฆฌ๊ณ SQL ํ์ค ์ง์ ๊ฐํ์ ์ค์ ์ ๋ ๋๊ท๋ชจ ์ ๋ฐ์ดํธ์ ๋๋ค. ํนํ ์ง๋ณด๋ ์ง๊ณต(VACUUM) ํ๋ก์ธ์ค์ ์ฆ๋ถ ๋ฐฑ์ (Incremental Backup) ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ํจ์จ์ฑ์ ํ๊ธฐ์ ์ผ๋ก ๋์ฌ์ค๋๋ค.
1. PostgreSQL 17 ์ฃผ์ ๋ณ๊ฒฝ์
1.1 ์ฑ๋ฅ ๋ฐ ์ด์ ์ต์ ํ
- VACUUM ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํ์ : VACUUM ์์ ์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ด ์์ ํ ์ฌ์ค๊ณ๋์ด, ๋ฉ๋ชจ๋ฆฌ ์๋น๋์ด ์ด์ ๋ฒ์ ๋๋น ์ต๋ 20๋ฐฐ ๊ฐ์ํ์ต๋๋ค. ์ด๋ ๊ณ ๋ถํ ์์คํ ์์ ์์ ๊ฒฝํฉ์ ์ค์ฌ์ค๋๋ค.
- ์คํธ๋ฆฌ๋ฐ I/O ๋์
: ์์ฐจ ์ค์บ(Sequential Scan) ๋ฐ
ANALYZE์์ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์๋ก์ด ์คํธ๋ฆฌ๋ฐ I/O ์ธํฐํ์ด์ค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. - ์ฆ๋ถ ๋ฐฑ์
(Incremental Backup):
pg_basebackup์์ ์ฆ๋ถ ๋ฐฑ์ ์ ๊ธฐ๋ณธ ์ง์ํฉ๋๋ค. ๋ํpg_combinebackup๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฆ๋ถ ๋ฐฑ์ ๋ณธ์ ์ ์ฒด ๋ฐฑ์ ๋ณธ์ผ๋ก ๋ณต์ํ ์ ์๊ฒ ๋์ด ๋ฐฑ์ ํจ์จ์ฑ์ด ๊ทน๋ํ๋์์ต๋๋ค.
1.2 SQL ๋ฐ ๊ฐ๋ฐ์ ํธ์ ๊ธฐ๋ฅ
- SQL/JSON ํ์ค ์ง์:
JSON_TABLE()ํจ์๋ฅผ ํตํด JSON ๋ฐ์ดํฐ๋ฅผ ๊ด๊ณํ ํ ์ด๋ธ ํํ๋ก ๋ณํํ์ฌ SQL ์กฐ์ธ์ด๋ ํํฐ๋ง์ ํ์ฉํ ์ ์์ต๋๋ค.JSON_EXISTS(),JSON_QUERY(),JSON_VALUE()๋ฑ ์๋ก์ด ์ฟผ๋ฆฌ ํจ์๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
- MERGE ๊ตฌ๋ฌธ ๊ฐํ:
MERGE๋ช ๋ น์์RETURNING์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ผ๋ฉฐ, ์ ๋ฐ์ดํธ ๊ฐ๋ฅํ ๋ทฐ(Updatable Views)๋ฅผ ๋์์ผ๋ก๋ ์คํํ ์ ์์ต๋๋ค. - COPY ์ค๋ฅ ๋ฌด์:
COPY๋ช ๋ น์ด์ON_ERROR ignore์ต์ ์ด ์ถ๊ฐ๋์ด, ์ผ๋ถ ํ์ ์๋ฌ๊ฐ ์๋๋ผ๋ ์์ ์ ์ค๋จํ์ง ์๊ณ ๊ณ์ ์งํํ ์ ์์ต๋๋ค.
1.3 ๋ ผ๋ฆฌ์ ๋ณต์ (Logical Replication)
- pg_createsubscriber: ๋ฌผ๋ฆฌ์ ๋๊ธฐ ์๋ฒ(Physical Standby)๋ฅผ ๋ ผ๋ฆฌ์ ๋ณต์ ๋ณธ(Logical Replica)์ผ๋ก ์์ฝ๊ฒ ์ ํํ ์ ์๋ ์๋ก์ด ์ ํธ๋ฆฌํฐ๊ฐ ๋์ ๋์์ต๋๋ค.
- ์ฅ์ ์กฐ์น(Failover) ์ง์: ๊ธฐ๋ณธ ์๋ฒ ์ฅ์ ์์๋ ๊ตฌ๋ ์(Subscriber)๊ฐ ๋๊ธฐํ ์ํ๋ฅผ ์ ์งํ ์ ์๋๋ก ์ ์ด ๊ธฐ๋ฅ์ด ๊ฐ์ ๋์์ต๋๋ค.
2. ์ ๊ทธ๋ ์ด๋ ์ ์ฃผ์์ฌํญ
- ๋ ผ๋ฆฌ์ ๋ณต์ ์ฌ๋กฏ: PostgreSQL 17๋ก ์ ๊ทธ๋ ์ด๋ํ ๋๋ ๊ธฐ์กด์ ๋ ผ๋ฆฌ์ ๋ณต์ ์ฌ๋กฏ์ด ๋ณด์กด๋์ง ์์ต๋๋ค(17์์ 18๋ก ๊ฐ ๋๋ ๊ฐ๋ฅ). ๋ฐ๋ผ์ ์ ๊ทธ๋ ์ด๋ ์ ์ฌ๋กฏ์ ์ญ์ ํ๊ณ ์ ๊ทธ๋ ์ด๋ ํ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค.
- Search Path ๋ณด์: ๋ณด์ ๊ฐํ๋ฅผ ์ํด ๊ด๋ฆฌ ์์
์ค
search_path๊ท์น์ด ๋ ์๊ฒฉํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ์ธ๋ฑ์ค ์์ด๋ ๊ตฌ์ฒดํ๋ ๋ทฐ์์ ์ฌ์ฉ๋๋ ํจ์๋ ์คํค๋ง ๋ช ์นญ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. - ์ง์ ์ค๋จ: AIX OS ์ง์์ด ๊ณต์์ ์ผ๋ก ์ค๋จ๋์์ต๋๋ค.
3. ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฐจ (pg_upgrade)
๊ฐ์ฅ ๊ถ์ฅ๋๋ ๋ฐฉ์์ ๋ฐ์ดํฐ ํ์ผ์ ์ง์ ๋ณต์ฌํ์ง ์๊ณ ๋งํฌ๋ง ์์ฑํ๋ --link ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
# 1. ์ ๋ฒ์ (17)์ ๋ฐ์ด๋๋ฆฌ ์ค์น ๋ฐ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ ์ด๊ธฐํ(initdb)
# 2. ์
๊ทธ๋ ์ด๋ ํธํ์ฑ ์ฒดํฌ
pg_upgrade \
--old-datadir /var/lib/postgresql/16/main \
--new-datadir /var/lib/postgresql/17/main \
--old-bindir /usr/lib/postgresql/16/bin \
--new-bindir /usr/lib/postgresql/17/bin \
--check
# 3. ์ค์ ์
๊ทธ๋ ์ด๋ ์ํ (ํ๋๋งํฌ ๋ชจ๋ ๊ถ์ฅ)
pg_upgrade \
--old-datadir /var/lib/postgresql/16/main \
--new-datadir /var/lib/postgresql/17/main \
--old-bindir /usr/lib/postgresql/16/bin \
--new-bindir /usr/lib/postgresql/17/bin \
--link4. ์ ๊ทธ๋ ์ด๋ ํ ๋ง๋ฌด๋ฆฌ ์์
- ํต๊ณ ์ ๋ณด ๊ฐฑ์ : ์
๊ทธ๋ ์ด๋ ์งํ์๋ ์คํ ๊ณํ ์ต์ ํ๋ฅผ ์ํด
./analyze_new_cluster.sh๋ฅผ ์คํํ์ฌ ํต๊ณ ์ ๋ณด๋ฅผ ๋ค์ ์์งํด์ผ ํฉ๋๋ค. - ์ต์คํ ์ ์ ๋ฐ์ดํธ: PostGIS ๋ฑ ์ฌ์ฉ ์ค์ธ ์ธ๋ถ ํ์ฅ์ด 17 ๋ฒ์ ์ ๋ง๊ฒ ์ ๋ฐ์ดํธ๋์๋์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ค์นํฉ๋๋ค.
- ์ธ๋ฑ์ค ์ฌ๊ตฌ์ฑ: ์ ๋ ฌ(Collation) ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์
๋ฐ์ดํธ๊ฐ ์์๋ค๋ฉด
REINDEX๋ฅผ ํตํด ์ธ๋ฑ์ค ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
PostgreSQL 17์ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ํ๊ฒฝ์์ VACUUM ์ฑ๋ฅ ํฅ์๊ณผ ์ฆ๋ถ ๋ฐฑ์ ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ ๊ทธ๋ ์ด๋ํ ๊ฐ์น๊ฐ ์๋ ๋ฒ์ ์ ๋๋ค.